package biolabs

/** Contains a high-level API for visualization.
  *
  * Visualization is viewed as a map <br/>
  *   ''object => visual representation.''
  *
  * This simple concept allows this API to be independent
  * of any particular technology (e.g. a graphics API).
  *
  * The above map is realized by an implementation of the
  * [[biolabs.visual.Visualizer]] trait.
  *
  * Once you have the visual representation, you push it into
  * a [[biolabs.sink.Sink]] that is able to consume (e.g. display) it.
  *
  * In a hierarchical setting, visual representation of an object
  * often incorporates visual representations of its children.
  * A [[biolabs.visual.Visualizable]] object is able to produce its
  * visual representation (with incorporated child representations)
  * based on the [[biolabs.visual.VisualizationConfiguration]].
  * Models defined using MCL implement `Visualizable` automatically.
  *
  * To accomplish repeated visualization of a given object, you can use
  * ([[biolabs.visual.VisualizationConfiguration]]'s `apply` method to
  * have the object visualized with every tick of a [[biolabs.core.Clock]]
  * and have the output written to the designated sink.
  *
  * Particular visualization technology is represented by an instance of
  * [[biolabs.visual.VisualizationMethod]]. It specifies the type of visual
  * representation acceptable by sinks of this technology. Its `configure`
  * method is used to create a visualization configuration.
  *
  * Some visualization technologies (e.g. Java2D) are procedural in nature
  * - they expose an API for ''drawing'' an image on a canvas instead of
  * for creating an in-memory representation of the image. In such case,
  * the visual representation produced by a visualizer can be a function
  * that draws the object's visualization on the canvas.
  */
package object visual
